using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._DisconnectedEditing
{
    /// <summary>
    /// <para>Check In From Delta</para>
    /// <para>Imports Changes from a delta file into the parent replica.</para>
    /// <para>将更改从增量文件导入到父副本中。</para>
    /// </summary>    
    [DisplayName("Check In From Delta")]
    public class CheckinDelta : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CheckinDelta()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_delta_database">
        /// <para>Check-in from Delta Database</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        /// <param name="_dest_workspace">
        /// <para>Check-in to Workspace</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        public CheckinDelta(object _in_delta_database, object _dest_workspace)
        {
            this._in_delta_database = _in_delta_database;
            this._dest_workspace = _dest_workspace;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Check In From Delta";

        public override string CallName => "management.CheckinDelta";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_delta_database, _dest_workspace, _reconcile.GetGPValue(), _output_workspace];

        /// <summary>
        /// <para>Check-in from Delta Database</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Check-in from Delta Database")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_delta_database { get; set; }


        /// <summary>
        /// <para>Check-in to Workspace</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Check-in to Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _dest_workspace { get; set; }


        /// <summary>
        /// <para>Reconcile with the Parent Version</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reconcile with the Parent Version")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _reconcile_value _reconcile { get; set; } = _reconcile_value._false;

        public enum _reconcile_value
        {
            /// <summary>
            /// <para>RECONCILE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RECONCILE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NON_RECONCILE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NON_RECONCILE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Workspace</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_workspace { get; set; }


        public CheckinDelta SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}